/*
 * Copyright (c)  2020,  DataPipeline
 * All rights reserved.
 *
 * Id:SQLLoader.java   2020-07-11 02:06 wanglijun
 */
package cn.datacare.orm.loader;

import cn.datacare.orm.conversion.SqlIdNameConversion;
import cn.datacare.orm.dialect.Dialect;
import cn.datacare.orm.manager.impl.SQLManager;
import cn.datacare.orm.source.SQLSource;

/**
 * <p>
 * Title: SQLLoader SQL加载接口
 * </p>
 * <p>
 * Description: SQLLoader SQL加载接口
 * </p>
 * <p>
 * Copyright: Copyright (c) 2020
 * </p>
 * <p>
 * Company/Department: DataPipeline
 * </p>
 *
 * @author wanglijun
 * @version 1.0
 * @since 2020-07-11 02:06
 */
public interface SQLLoader {

    /**
     * 加载sql，如果未找到，抛出错误
     *
     * @param id
     * @return SQLSource
     */
    SQLSource getSQL(String id);

    /**
     * 判断一个sql是否修改过
     *
     * @param id
     * @return boolean
     */
    boolean isModified(String id);

    /**
     * 判断一个sql是否存在
     *
     * @param id
     * @return
     */
    boolean existed(String id);

    /**
     * 检查文件是否存在
     *
     * @param id
     * @return boolean
     */
    boolean existedResource(String id);

    /**
     * SQLLoader里增加一个自动生成的SQL
     *
     * @param id
     * @param sqlSource
     */
    void addSQL(String id, SQLSource sqlSource);

    /**
     * 每次都检测sql变化
     *
     * @return
     */
    boolean isAutoCheck();

    /**
     * 设置是否检测SQL变化，开发模式下检查
     *
     * @param check
     */
    void setAutoCheck(boolean check);

    /***
     * 获取编号格式
     * @return String
     */
    String getCharset();

    /***
     * 设置字符编码
     * @param charset
     */
    void setCharset(String charset);

    /**
     * sqlId到sql文件的转化
     *
     * @param sqlIdNc
     */
    void setSQLIdNameConversion(SqlIdNameConversion sqlIdNc);

    /**
     * 设置当前使用的数据库，以让sqlloder优先寻找数据库
     *
     * @param dialect
     */
    void setDialect(Dialect dialect);

    /***
     * 获取数据
     * @return
     */
    SQLManager getSQLManager();

    /***
     * 设置管理
     * @param sqlManager
     */
    void setSQLManager(SQLManager sqlManager);

    /***
     * 刷新
     */
    void refresh();
}
